package com.code.web.user;

import com.code.annotation.CuratorLockAnnotation;
import com.code.common.web.annotations.ResponseResult;
import com.code.service.UserClient;
import com.code.user.model.po.User;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 用户管理控制器
 *
 * @author tangyifei
 */
@ResponseResult
@RestController("userController")
@RequestMapping("/users")
public class UserController {

    @Resource
    private UserClient userClient;

    /**
     * 添加用户和积分
     *
     * @param user 用户实体类
     * @return 添加后的用户信息
     * @description 不同的前端界面，可能有不同的查询诉求，通过该接口统一满足。
     */
    @ApiOperation(value = "添加用户和积分", response = User.class, notes = "添加用户和积分", httpMethod = "POST")
    @PostMapping("/add-user-and-point")
//    @RateLimit(key = "limitAddUserAndPoint")
    @CuratorLockAnnotation(keyParts = "phone")
    public User addUserAndPoint(@RequestBody User user) {
        return userClient.addUserAndPoint(user);
    }

    /**
     * 获取积分
     *
     * @return 积分
     */
    @ApiOperation(value = "获取积分", notes = "获取积分", httpMethod = "GET")
    @GetMapping("/get-point")
    public String getPoint() {
        return userClient.getPoint();
    }

    /**
     * 获取配置文件中的数组
     *
     * @return 数组
     */
    @ApiOperation(value = "获取配置文件中的数组", notes = "获取配置文件中的数组", httpMethod = "GET")
    @GetMapping("/get-array")
    public String[] getArray() {
        return userClient.getArray();
    }

    /**
     * 获取配置文件中的列表
     *
     * @return 列表
     */
    @ApiOperation(value = "获取配置文件中的列表", notes = "获取配置文件中的列表", httpMethod = "GET")
    @GetMapping("/get-list")
    public List<String> getList() {
        return userClient.getList();
    }

    /**
     * 获取配置文件中的set集合列表
     *
     * @return 列表
     */
    @ApiOperation(value = "获取配置文件中的set集合列表", notes = "获取配置文件中的set集合列表", httpMethod = "GET")
    @GetMapping("/get-set")
    public Set<Integer> getSet() {
        return userClient.getSet();
    }

    /**
     * 获取配置文件中的map集合列表
     *
     * @return 列表
     */
    @ApiOperation(value = "获取配置文件中的map集合列表", notes = "获取配置文件中的map集合列表", httpMethod = "GET")
    @GetMapping("/get-map")
    public Map<String, String> getMap() {
        return userClient.getMap();
    }

    /**
     * 验证token的有效性
     *
     * @return 验证结果
     */
    @ApiOperation(value = "验证token的有效性", notes = "验证token的有效性", httpMethod = "GET")
    @GetMapping("/verify-token")
    public boolean verifyToken() throws Exception {
        return userClient.verifyToken();
    }

}
